import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import util.IO;//从IO中读取并导入学生作业信息

/**
 * Init 用于根据名单创建存放学生作业的目录
 */
public class Init {
    /**
     * @成绩表单转换迭代器
     * @param lineList
     * @return
     * 
     *         1. 功能简介 （1） 该迭代器的核心任务是检验学生表单的命名是否规范，并创建学生作业存放目录
     *         （2）如果学生成绩文件夹的命名格式是以id为开头的话，就将文件夹名称中的“-”替换为“，”，并将当前文件夹返回
     * 
     *         2. 设计重点 （1）集合设计的分离性与可复用性。 List是一个接口，ArrayList是其一个实现类。
     *         （2）for-each增强版迭代器//好在哪里 （3）contine：直接干掉命名格式不规范的作业文件夹
     */


    /**
     * @学生信息的读录模块：init-IO
     * Level 0: 学生各次作业的信息 （sp：hw？）
     * Level 1:收录每个学生个人作业情况的文件夹集合 （sp：id-name）--Link：${id},{name}
     * Level 2:管理所有学生作业情况的总文件夹 （sp：hwDir）
     * -tree
     *  -hw
     *    -person1hw
     *      -hw_1
     *      -hw_2
     */

    // Level 1:收录每个学生个人作业情况的文件夹集合
    public static List<String> getDirList(List<String> lineList) {
        //创建一个字符串类型的集合来存放各个学生相关作业信息的文件夹
        List<String> dirList = new ArrayList<>();

        // 使用for-each实现迭代，对linelist中的每一行实行遍历循环
        /** 增强型for-each */
        for (String line : lineList) {
            // .startwith() 如果字符串以特定前缀开始则返回true，否则返回false
            // (1) 如果返回true，说明该行字符串命名格式合法，将该行文件信息中的“,”全部替换成“-”
            // (2) 如果返回false，说明该行字符串命名格式不合法，跳出当前循环进行下一次循环
            if (line.startsWith("id")) {
                continue;
            }
            String dir = line.replace(",", "-");
            dirList.add(dir);
        }
        //将所有返回的重新命名集成为一个文件夹的集合:link-IO.mkdir()
        return dirList;

    }

    public static void run(String nameListFile, String hwDir) {
        //Level 2:
        //在标识符为hwDir的指定位置创建收录所有学生个人作业信息的学生作业管理文件夹:link-IO.mkdir()
        IO.mkdir(hwDir);
        /**
         * 指定标准字符集UTF-8码,是标准的字符集恒定类相关定义（下面是定义的全貌，理解UTF-8码是输入字符集的标准格式即可）
         * public static final Charset UTF_8 = Charset.forName("UTF-8");
         */
        //将指定文件中的字节转换为UTF-8码并读入字符串列表中
        List<String> lineList = IO.fileToStringList(nameListFile, StandardCharsets.UTF_8);
        //获取存储学生个人信息的文件夹序列
        List<String> dirList = getDirList(lineList);
        // System.out.println(dirList);
        //将记录每个学生作业情况的文件夹集合(${id}-{name}) 的每一条文件夹记录dir遍历
        for (String dir : dirList) {
            //分隔以路径形式给定的文件序列中的文件名,也就是解决文件夹路径名字在转义上的一些问题
            //比如我的path追溯:用/ \\ :的限制变小了
            String newDir = hwDir + File.separator + dir;
            //由此生成一个便于访问的新表单，巧妙解决了跨平台的问题
            IO.mkdir(newDir);
        }
    }

    public static void main(String[] args) {
        // 测试
        // javac -cp src/ -d dist/ src/Init.java
        // java -cp dist/ Init name-list.csv hw
        String nameListFile = "name-list.csv";      
        String hwDir = "hw";
        Init.run(nameListFile, hwDir);
    }
}

/**
 * StandardCharsets
 * 
 */